package com.li.mybatisplus.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * @author liXingaYu
 * @create 2022-03-16 10:29
 */
@Data
@TableName(value = "t_user")//如果表名和实体类的名字不一样，要标注出来
public class User {

    //    @TableId(value = "uid")如果数据库里面字段是uid，但是实体类已经写成id了，可以用这个方式解决，甚至mapper.xml里的sql语句都不用改

    //如果名字不是默认的"id",需要加上@TableID注解
//    @TableId

    //type = IdType.AUTO id自增，需要数据库配合，id字段也要是自增的   如果项目中每个实体类id都要自增就去application中设置
    @TableId(value = "uid",type = IdType.AUTO)

    private Long id;
//    @TableField("username") 和id一样，如果数据库中的任何一条语句变了，可以用@TableField来标注

    //对mybatis-plus自动填充的浅薄理解：通过使用mybatis-plus自带的注解，对实体类中的属性进行修饰，让后在业务层新建
    //MyMeteObjectHandler类来继承MetaObjectHandler接口。对需要自动填充的属性进行判断，最终实现属性能有默认值，
    // 或者自动填充上需要的值。来简化开发
    @TableField(fill = FieldFill.INSERT)
    private String name;
    private Integer age;
    private String email;

    //也可以在数据库中create_time字段默认值设置为 CURRENT_TIMESTAMP
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    //也可以在数据库中将updateTime字段默认值设置为 CURRENT_TIMESTAMP 并且还要根据当前时间戳更新
    //使用@TableField(fill = FieldFill.INSERT_UPDATE) 这种方式优点是不用每个表都要去设置一次，
    // 但是要写一个handler类来完成业务 MyMeteObjectHandler
    @TableField(fill = FieldFill.UPDATE)
    private LocalDateTime updateTime;

    //remove删除语句变UPDATE修改语句 UPDATE t_user SET is_deleted=1 WHERE uid=? AND is_deleted=0
    //查询语句自带查询条件WHERE is_deleted=0
    // SELECT uid AS id,name,age,email,create_time,update_time,is_deleted AS deleted FROM t_user WHERE is_deleted=0

    @TableLogic//逻辑删除 正常的是0 false，被删除后是1 true
    @TableField(value = "is_deleted")
    private Integer deleted;
}
